from PIL import Image, ImageDraw
import math

def add_graphic_to_image(image_path, output_path, position, outer_radius, inner_radius, triangle_height, triangle_offset):
    # 打开现有的图片
    existing_image = Image.open(image_path)

    # 获取绘制对象
    draw = ImageDraw.Draw(existing_image)

    # 圆的底部坐标
    circle_bottom = position[1] - outer_radius

    # 三角形的底部中心点坐标（在圆的正下方，有一定偏移）
    triangle_base_center_y = circle_bottom - triangle_offset
    triangle_base_center = (position[0], triangle_base_center_y)

    # 三角形的顶点坐标（两个侧边点根据底角和高度计算）
    triangle_side_point_left_x = triangle_base_center[0] - triangle_height / (2 * math.tan(math.radians(30)))
    triangle_side_point_right_x = triangle_base_center[0] + triangle_height / (2 * math.tan(math.radians(30)))
    triangle_side_point_left = (triangle_side_point_left_x, triangle_base_center_y - triangle_height)
    triangle_side_point_right = (triangle_side_point_right_x, triangle_base_center_y - triangle_height)

    # 多边形顶点的列表
    triangle_points = [triangle_side_point_left, triangle_base_center, triangle_side_point_right]

    # 绘制红色圆圈
    draw.ellipse((position[0] - outer_radius, position[1] - outer_radius,
                  position[0] + outer_radius, position[1] + outer_radius),
                 fill='red')

    # 绘制白色圆圈
    draw.ellipse((position[0] - inner_radius, position[1] - inner_radius,
                  position[0] + inner_radius, position[1] + inner_radius),
                 fill='white')

    # 绘制倒置三角形（填充为红色，与圆圈颜色相同以保持连续感）
    draw.polygon(triangle_points, fill='red')

    # 保存修改后的图像
    existing_image.save(output_path)

    # 显示修改后的图像（可选）
    existing_image.show()

# 使用函数并指定参数
image_path = '2.png'  # 替换为你的图片路径
output_path = 'path_to_output_image.jpg'        # 替换为你想要保存的路径
custom_position = (1010, 360)                   # 自定义坐标位置
custom_outer_radius = 30                       # 自定义外部圆圈半径
custom_inner_radius = 10                       # 自定义内部圆圈半径
custom_triangle_height = 30                    # 自定义三角形的高度（从底部中心点到三角形顶点的垂直距离）
custom_triangle_offset = -75                    # 自定义三角形底部中心点到圆底部边缘的垂直距离

add_graphic_to_image(image_path, output_path, custom_position, custom_outer_radius, custom_inner_radius, custom_triangle_height, custom_triangle_offset)